{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# HowTo: Use ForeTiS as a pip package" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this Jupyter notebook, we show how you can use ForeTiS as a pip package and also guide you through the steps that ForeTiS is doing when triggering an optimization run.\n", "\n", "Please clone the whole GitHub repository if you want to run this tutorial on your own, as we need the tutorial data from our GitHub repository and to make sure that all paths we define are correct: ``git clone https://github.com/grimmlab/ForeTiS.git``\n", "\n", "Then, start a Jupyter notebook server on your machine and open this Jupyter notebook, which is placed at ``docs/source/tutorials`` in the repository.\n", "\n", "However, you could also download the single files and define the paths yourself:\n", "\n", "- The Jupyter notebook can be downloaded here: [HowTo: Use ForeTiS as a pip package.ipynb](https://github.com/grimmlab/ForeTiS/tree/master/docs/source/tutorials/HowTo%20Use%20ForeTiS%20as%20a%20pip%20package.ipynb)\n", "\n", "- The data we use can be found here: [tutorial data](https://github.com/grimmlab/ForeTiS/tree/main/docs/source/tutorials/tutorial_data)\n" ] }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": "" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Installation, imports and paths\n", "First, we may need to install ForeTiS (uncomment if it is not already installed). Then, we import ForeTiS as well as further libraries that we need in this tutorial. In the end, we define some paths and filenames which we will use more often throughout this tutorial. We will save the results in the same directory where this repository is placed." ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [], "source": [ "# !pip3 install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ ForeTiS" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [], "source": [ "import ForeTiS\n", "import pathlib\n", "import pandas as pd\n", "import datetime\n", "import pprint" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [], "source": [ "# Definition of paths and filenames\n", "cwd = pathlib.Path.cwd()\n", "data_dir = cwd.joinpath('tutorial_data')\n", "save_dir = data_dir\n", "model = 'xgboost'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Run whole optimization pipeline at once\n", "As shown for the [Docker workflow](https://ForeTiS.readthedocs.io/en/latest/tutorials/tut_run_docker.html), ForeTiS offers a function [optim_pipeline.run()](https://github.com/grimmlab/ForeTiS/blob/master/ForeTiS/optim_pipeline.py) that triggers the whole optimization run. \n", "\n", "In the definition of ``optim_pipeline.run()``, we set several default values. In order to run it using our tutorial data, we just need to define the data and directories we want to use as well as the models we want to optimize. Furthermore, we set values for the ``datasplit`` and ``n_trials`` to limit the waiting time for getting the results.\n", "\n", "When calling the function, we first see some information regarding the data preprocessing and the configuration of our optimization run, e.g. the data that is used. Then, the current progress of the optuna optimization with results of the individual trials is shown. Afterwards, the optimized model with the best hyperparameters get retrained and tested on a unknown test set. This process of optimizing the hyperparameters and testing the model gets executed for every created feature set. In the end, we show a summary of the whole optimization run." ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/josef/.local/lib/python3.10/site-packages/ForeTiS/optimization/optuna_optim.py:120: ExperimentalWarning: RetryFailedTrialCallback is experimental (supported from v2.8.0). The interface can change in the future.\n", " failed_trial_callback=optuna.storages.RetryFailedTrialCallback(max_retry=3))\n", "\u001B[32m[I 2023-03-03 21:50:28,146]\u001B[0m A new study created in RDB with name: 2023-03-03_21-50-28_-MODELxgboost-TRIALS10-FEATURESETdataset_full\u001B[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "---Dataset is already preprocessed---\n", "### Dataset is loaded ###\n", "### Starting Optuna Optimization for model xgboost and featureset dataset_full ###\n", "## Starting Optimization\n", "Params for Trial 0\n", "{'n_estimators': 700, 'max_depth': 10, 'learning_rate': 0.225, 'gamma': 600, 'subsample': 0.2, 'colsample_bytree': 0.2, 'reg_lambda': 58.0, 'reg_alpha': 867.0}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001B[32m[I 2023-03-03 21:50:30,959]\u001B[0m Trial 0 finished with value: 12477267674.395584 and parameters: {'n_estimators': 700, 'max_depth': 10, 'learning_rate': 0.225, 'gamma': 600, 'subsample': 0.2, 'colsample_bytree': 0.2, 'reg_lambda': 58.0, 'reg_alpha': 867.0}. Best is trial 0 with value: 12477267674.395584.\u001B[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Params for Trial 1\n", "{'n_estimators': 800, 'max_depth': 8, 'learning_rate': 0.025, 'gamma': 970, 'subsample': 0.8500000000000001, 'colsample_bytree': 0.25, 'reg_lambda': 182.0, 'reg_alpha': 183.0}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001B[32m[I 2023-03-03 21:50:34,236]\u001B[0m Trial 1 finished with value: 23865390820.383522 and parameters: {'n_estimators': 800, 'max_depth': 8, 'learning_rate': 0.025, 'gamma': 970, 'subsample': 0.8500000000000001, 'colsample_bytree': 0.25, 'reg_lambda': 182.0, 'reg_alpha': 183.0}. Best is trial 0 with value: 12477267674.395584.\u001B[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Params for Trial 2\n", "{'n_estimators': 650, 'max_depth': 6, 'learning_rate': 0.15, 'gamma': 290, 'subsample': 0.6500000000000001, 'colsample_bytree': 0.15000000000000002, 'reg_lambda': 292.0, 'reg_alpha': 366.0}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001B[32m[I 2023-03-03 21:50:36,728]\u001B[0m Trial 2 finished with value: 16570702631.08224 and parameters: {'n_estimators': 650, 'max_depth': 6, 'learning_rate': 0.15, 'gamma': 290, 'subsample': 0.6500000000000001, 'colsample_bytree': 0.15000000000000002, 'reg_lambda': 292.0, 'reg_alpha': 366.0}. Best is trial 0 with value: 12477267674.395584.\u001B[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Params for Trial 3\n", "{'n_estimators': 750, 'max_depth': 9, 'learning_rate': 0.07500000000000001, 'gamma': 510, 'subsample': 0.6000000000000001, 'colsample_bytree': 0.05, 'reg_lambda': 608.0, 'reg_alpha': 170.0}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001B[32m[I 2023-03-03 21:50:39,557]\u001B[0m Trial 3 finished with value: 32826934290.40348 and parameters: {'n_estimators': 750, 'max_depth': 9, 'learning_rate': 0.07500000000000001, 'gamma': 510, 'subsample': 0.6000000000000001, 'colsample_bytree': 0.05, 'reg_lambda': 608.0, 'reg_alpha': 170.0}. Best is trial 0 with value: 12477267674.395584.\u001B[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Params for Trial 4\n", "{'n_estimators': 500, 'max_depth': 10, 'learning_rate': 0.3, 'gamma': 810, 'subsample': 0.35000000000000003, 'colsample_bytree': 0.1, 'reg_lambda': 684.0, 'reg_alpha': 440.0}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001B[32m[I 2023-03-03 21:50:41,567]\u001B[0m Trial 4 finished with value: 27304306183.488396 and parameters: {'n_estimators': 500, 'max_depth': 10, 'learning_rate': 0.3, 'gamma': 810, 'subsample': 0.35000000000000003, 'colsample_bytree': 0.1, 'reg_lambda': 684.0, 'reg_alpha': 440.0}. Best is trial 0 with value: 12477267674.395584.\u001B[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Params for Trial 5\n", "{'n_estimators': 550, 'max_depth': 6, 'learning_rate': 0.025, 'gamma': 910, 'subsample': 0.3, 'colsample_bytree': 0.7000000000000001, 'reg_lambda': 312.0, 'reg_alpha': 520.0}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001B[32m[I 2023-03-03 21:50:43,798]\u001B[0m Trial 5 finished with value: 41682236193.01747 and parameters: {'n_estimators': 550, 'max_depth': 6, 'learning_rate': 0.025, 'gamma': 910, 'subsample': 0.3, 'colsample_bytree': 0.7000000000000001, 'reg_lambda': 312.0, 'reg_alpha': 520.0}. Best is trial 0 with value: 12477267674.395584.\u001B[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Params for Trial 6\n", "{'n_estimators': 800, 'max_depth': 3, 'learning_rate': 0.3, 'gamma': 780, 'subsample': 0.9500000000000001, 'colsample_bytree': 0.9000000000000001, 'reg_lambda': 598.0, 'reg_alpha': 922.0}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001B[32m[I 2023-03-03 21:50:46,862]\u001B[0m Trial 6 finished with value: 10334330757.877611 and parameters: {'n_estimators': 800, 'max_depth': 3, 'learning_rate': 0.3, 'gamma': 780, 'subsample': 0.9500000000000001, 'colsample_bytree': 0.9000000000000001, 'reg_lambda': 598.0, 'reg_alpha': 922.0}. Best is trial 6 with value: 10334330757.877611.\u001B[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Params for Trial 7\n", "{'n_estimators': 500, 'max_depth': 3, 'learning_rate': 0.025, 'gamma': 320, 'subsample': 0.4, 'colsample_bytree': 0.3, 'reg_lambda': 829.0, 'reg_alpha': 357.0}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001B[32m[I 2023-03-03 21:50:48,724]\u001B[0m Trial 7 finished with value: 57564233462.41369 and parameters: {'n_estimators': 500, 'max_depth': 3, 'learning_rate': 0.025, 'gamma': 320, 'subsample': 0.4, 'colsample_bytree': 0.3, 'reg_lambda': 829.0, 'reg_alpha': 357.0}. Best is trial 6 with value: 10334330757.877611.\u001B[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Params for Trial 8\n", "{'n_estimators': 650, 'max_depth': 6, 'learning_rate': 0.05, 'gamma': 810, 'subsample': 0.1, 'colsample_bytree': 1.0, 'reg_lambda': 773.0, 'reg_alpha': 198.0}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001B[32m[I 2023-03-03 21:50:51,289]\u001B[0m Trial 8 finished with value: 59564589526.27223 and parameters: {'n_estimators': 650, 'max_depth': 6, 'learning_rate': 0.05, 'gamma': 810, 'subsample': 0.1, 'colsample_bytree': 1.0, 'reg_lambda': 773.0, 'reg_alpha': 198.0}. Best is trial 6 with value: 10334330757.877611.\u001B[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Params for Trial 9\n", "{'n_estimators': 500, 'max_depth': 9, 'learning_rate': 0.225, 'gamma': 730, 'subsample': 0.8, 'colsample_bytree': 0.1, 'reg_lambda': 358.0, 'reg_alpha': 115.0}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001B[32m[I 2023-03-03 21:50:53,199]\u001B[0m Trial 9 finished with value: 21784303396.630066 and parameters: {'n_estimators': 500, 'max_depth': 9, 'learning_rate': 0.225, 'gamma': 730, 'subsample': 0.8, 'colsample_bytree': 0.1, 'reg_lambda': 358.0, 'reg_alpha': 115.0}. Best is trial 6 with value: 10334330757.877611.\u001B[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "## Optuna Study finished ##\n", "Study statistics: \n", " Finished trials: 10\n", " Pruned trials: 0\n", " Completed trials: 10\n", " Best Trial: 6\n", " Value: 10334330757.877611\n", " Params: \n", " colsample_bytree: 0.9000000000000001\n", " gamma: 780\n", " learning_rate: 0.3\n", " max_depth: 3\n", " n_estimators: 800\n", " reg_alpha: 922.0\n", " reg_lambda: 598.0\n", " subsample: 0.9500000000000001\n", "## Retrain best model and test ##\n", "## Results on test set with refitting period: complete ##\n", "{'test_refitting_period_complete_mse': 7746675083.946438, 'test_refitting_period_complete_rmse': 88015.19802821804, 'test_refitting_period_complete_r2_score': 0.849709510924217, 'test_refitting_period_complete_explained_variance': 0.8500353551866467, 'test_refitting_period_complete_MAPE': 4.376419954227729, 'test_refitting_period_complete_sMAPE': 4.09452881498149}\n" ] }, { "data": { "image/png": "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JUs4ePAg2dnZrF+/HovFwujRo+nbty8Affv2Zdq0afz4449kZWXxzTffUFNTww033MCQIUN47LHHePvtt4mNjeXTTz8lNTWVo0ePsmTJElq1asWbb77Jhg0bGDFiBEVFRXz88cecPHmS9PR0hgwZQufOnVmwYAG5ubn12gF+/fVXFi9eDMiK7t5772XgwIFs3ryZgwcPsnr1aqZMmcINN9zAn3/+yezZs/n+++/Jzs5mzZo1hISE0KlTJzZs2MC8efPo3bs3paWlAERGRvLGG2+wbds25s2bx0svvQTI7tRHHnmEb775hhYtWvDKK6+wZs0a7r//fpKSkhyu1n79+jFx4kTS09N56KGH+OabbwCIiYlh3759DqU5YMAAXn31VQD27t1LQUEBFouFzZs3M3v2bJYuXQrgkD979mwWLFhAq1atWLhwIbt372bZsmUKJTx06FB27tzJrFmzOH78OJ999hmbN2+muLiY7777jsLCQvr16+f4fvfu3bn33nvZtm0b8+fP5+GHH2bDhg18++23aLVapk6dypYtW9izZw8DBgxgypQpHD9+nJtvvpndu3ezdu1avvzyS0JCQlizZg2tW7fmtttuIzg4WKHsqqurycnJISgoyPHZ888/j7e3N8eOHSMuLo533nnH0RYcHIynpydGoxGbzUZoaCju7u4AuLu7s2bNGlasWMFdd92FxWLh7rvvZuLEiYDsRVm3bp1D1v3338+AAQN46qmn6j33AQEB7Nixg759+1JcXMzXX38NyMp54sSJBAQEOCZRGzduJCAgwHGst7c3ZWVltG3bloiICIUSrqqqYtKkSUyfPh2r1cqtt97KZZddRseOHenQoQMrV64USlhwQbBq1XJGjJhEWdkagoNjWbXq9BPls3FJKeGzWbAdF8eytqiY0X4BrC0tpmO7dnTc+eM5uZFP547+5ptv6NGjByqVCp1OR9euXUlOTgYgOjoagCNHjnDgwAFuueUWQK4ilpWVRUFBgcNFbl//ys3N5emnn8bLy4sTJ05w1VVX0a5dO8aNG8fdd9+NxWIhISFB0a8ztVutVvR6PQBpaWl069YNwKGQnnvuOXr27AnIVo19LT4gIMDh1vT09HREs/v4+FBbWwvgmGh0796d5557ztGXwsJC8vPzmTFjBiCvBZ+a833kyBF++eUX1q9fD6CooBYSEuKwkEHO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X49Op7P+va6uDjc3N4fPfvPNN/z222/WvbpVq1YxYMCADuni4eFB//79cXJyIiAgAJVK1aQBtEcPCzU1NRQWFtK3b18Ahg4dip+fHzKZjFtvvZWcnByHzw8dOhQXFxfmz5/PTz/9hEajob6+3vp5fX19k8bqCEvnt30Hb29vRowYgUKhwMvLC41GQ2FhoUM5R48eZcOGDcyePRtPT0/r7Ly57Lbo3r077777LiNGjGDLli04OzszZswYnJ2dcXFxoW/fvg5nv/baWPM23HyAa467u7t179Li8eioHps3b2bRokX861//4s477+T999+/rDJ5/vnnSU5OZtGiRXh6euLh4dFm/Vy8eJGFCxcyZMgQBg8ebFduW7rYk9G8jttTJrZyevbsSXFxMRs3bmTFihXk5+ezefPmDutir44vp0x++OEHBg8ebI3jaE87aS7HXj23p1zaGs/ao4utDNvys9DeNttcTvM+2J52a5GxbNkytFptizruaJm4urq26IOXO6bYcl0a4V69evHrr78CcPbsWeum++WwZMkSMjMzATh16pS1Izni22+/JTk5GQCVSoVMJiMsLIzff/8dgF9//ZU+ffo4lLFw4UIWLlzIggUL0Gg0vPDCCyxdurRDuvTu3ZsTJ04gCAKlpaXU19fTt2/fDulhIS0tzWqABUEgISGBS5cuAXD69Ok2dcnKyuLmm2/m9ddf5/bbb6dnz544OTlRXFyMIAicPHmy3bpoNJoW73Dq1CneeecdQDToeXl5BAYGtirj22+/ZdeuXSxYsAA/Pz9AXJGmpaWh0+mora2loKCA4OBgh7okJiZagzNcXFyQy+UUFhYyb948TCYTBoOB9PR0QkNDW5Vhr4317t2bkydPYjKZuHjxIoIg4Onp2aqM3r17W9t8WloaQUFBHdbD3d3dGoDi4+NDTU3NZZXJ8ePHmTFjBvPnz6e6upp+/fo5rJ/y8nKWLFnCk08+yT333NOqXEe62JNhr47bKpPmciIiInj77bdZsGABL774IkFBQdaAo47oYq+OL6dMTp061cQ71lY7sSfHXj07Kpf2jmeOdLEnw15AaFv1Y0/OsmXLWvRBR/XTXIa3tzfvvPNOizruaJn06dOnRR+8nP7TnOsyOnrgwIH89ttvzJ07F0EQeP755y9b1jPPPMOmTZtQKBR4e3vz7LPPtuv716xZw2uvvYbBYGDy5MkEBgayfv16DAYDgYGBDBo06Krrcsstt5CWlsacOXMwmUzExcXRo0ePy9KjsLDQOpDJZDLi4+NZvnw5KpWKoKAghg0b5vB5f39/tm/fzmeffYabmxvx8fFcvHiRlStXYjKZ6NevXwvXVGtMmjSpxTvI5XJOnjzJq6++ikwm4/HHH2/VaJlMJjZt2kS3bt1Yvnw5ANHR0TzyyCPce++9vPbaa5hMJh577DFUKpVDXcaPH8+aNWtwcnJCpVIRHx9P165dufPOO3n11VdRKBTceeedDjuevXp1dXWld+/e1jYcFxfXZpmsW7eOPXv24OrqyowZM3B3d++QHvHx8axYsQK5XI6TkxNTp07F29u7w2Xi7+/PokWLcHZ25qabbuKvf/0rQKv1k5ycTHV1NZ9++imffvopAHPmzGnxPY50aS7DZDKRl5dnt44dlcnV0MVSP1u2bGlRxx0tE9t+CFgnbK21E3typk6d2qKee/To0Wq5tHc8k8vlrepiT4a9dhQUFOSwfuzJ8fT0bNEHHdXPldDFngyNRmO3D3a0/zRHypglISEhISFxjbgu3dESEhISEhI3ApIRlpCQkJCQuEZIRlhCQkJCQuIaIRlhCQkJCQmJa4RkhCUkJCQkJK4R1+URJQmJPwNJSUmkpaUBYlrQHj16WI8/jBgxgtraWsaPH3/Fv9dgMPDRRx9x4sQJZDIZgiAQExPDhAkTkMlkHD9+nIyMDGu6RAkJictHMsISEp2U2NhY68/Tpk1jxowZhIeHX/XvTUlJ4fz58yQmJqJQKKitrWXhwoV4enoyfPhwMjMzqa6uvup6SEj8GZCMsITEdciOHTuoqqoiLi6OadOmcccdd/Drr79SVVXFI488Qnp6Ojk5OSgUCl5++WV8fHwoLS3lvffe4+LFixiNRmJiYnjwwQdbyC4rK8NoNKLX61EoFLi6ujJ9+nRMJhMZGRns3bsXk8mEq6srjz/+OAcOHGD37t0IgoCHhwexsbEEBgZar8IrKCigsrKSfv368fTTT+PkJA07EhIWpN4gIXEDoNfrWbZsGUePHmXFihUkJiai0WhYtmwZBw8e5MEHH2TlypWMHTuWW2+9FZ1Ox5tvvom/v3+LO6vHjRvHsmXLiIuLIzIykl69ejFo0CBrSr8RI0ZQVVXF448/TmpqKocOHbJm0Dp58iTLly+3pmvUarUsXLgQhULB4sWL2bdvH6NHj/7Dy0dCorMiGWEJiRuA2267DRBvOPL29rZe8efn50d1dTX19fWkpqZSXV3N9u3bATGfcW5ubgsjbLmgPj8/n9OnT/P7778zd+5cJk2axKhRo5r87/HjxykuLmbu3LnWv1VXV1vd1XfddZf15pq77rqLn376STLCEhI2SEZYQuIGQKlUWn+25+41mUwALF68GGdnZ0C8CtNentsPPviAe+65h6CgIIKCghg9ejTffvstO3fubGGETSYTQ4YMYeLEidbfy8rKrDfJ2N5uZjKZ7Cb1l5D4MyP1CAmJPwGurq5ERkby5ZdfAuLVlfPmzePnn39u8b8VFRVs376dhoYGQLxVq7Cw0OqOVigU1vu7+/Xrx5EjRygrKwNg7969LFq0yCrr6NGj6PV6dDodhw4dsl4FJyEhISKthCUk/iTMmDGDpKQk/v73v2MwGLjjjjusF7jb8swzz7Bt2zYSEhJQKpUYjUb69u1rvTXn5ptvZvny5Tg5OREbG8sDDzzA4sWLkclkuLi4kJCQYL0T2tnZmfnz51NTU8OgQYOsl9VLSEiISLcoSUhIXBVWr15NcHAw999//7VWRUKi0yK5oyUkJCQkJK4R0kpYQkJCQkLiGiGthCUkJCQkJK4RkhGWkJCQkJC4RkhGWEJCQkJC4hohGWEJCQkJCYlrhGSEJSQkJCQkrhH/HxqRyfF3iSHXAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "### Finished Optuna Optimization for xgboost and featureset dataset_full ###\n", "# Optimization runs done for models ['xgboost'] and ['dataset_full']\n", "Results overview on the test set(s)\n", "{'xgboost': {'dataset_full': {'Test': {'best_params': {'colsample_bytree': 0.9000000000000001,\n", " 'gamma': 780,\n", " 'learning_rate': 0.3,\n", " 'max_depth': 3,\n", " 'n_estimators': 800,\n", " 'reg_alpha': 922.0,\n", " 'reg_lambda': 598.0,\n", " 'subsample': 0.9500000000000001},\n", " 'eval_metrics': {'test_refitting_period_complete_MAPE': 4.376419954227729,\n", " 'test_refitting_period_complete_explained_variance': 0.8500353551866467,\n", " 'test_refitting_period_complete_mse': 7746675083.946438,\n", " 'test_refitting_period_complete_r2_score': 0.849709510924217,\n", " 'test_refitting_period_complete_rmse': 88015.19802821804,\n", " 'test_refitting_period_complete_sMAPE': 4.09452881498149},\n", " 'retries': 0,\n", " 'runtime_metrics': {'process_time_max': 18.45159076599998,\n", " 'process_time_mean': 13.805673200400008,\n", " 'process_time_min': 10.010519391999992,\n", " 'process_time_std': 2.932392361664868,\n", " 'real_time_max': 3.247318983078003,\n", " 'real_time_mean': 2.4725477933883666,\n", " 'real_time_min': 1.8300788402557373,\n", " 'real_time_std': 0.4933237490143201}}}}}\n" ] }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ForeTiS.optim_pipeline.run(data_dir=data_dir, data='nike_sales', config_file_section='nike_sales', save_dir=data_dir, models=[model], n_trials=10, periodical_refit_frequency=['complete'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Within the defined ``save_dir``, a ``results`` folder will be created. \n", " \n", "Then, ForeTiS' default folder structure follows: ``model/featureset/``.\n", "\n", "We can see this structure below with all optimization results for the defined ``model``." ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/josef/Schreibtisch/01_HorticulturalSalesPrediction/ForeTiS/docs/source/tutorials/tutorial_data/results/xgboost/2023-03-03_21-50-28_dataset_full\n" ] } ], "source": [ "result_folders = list(save_dir.joinpath('results', model).glob('*'))\n", "for results_dir in result_folders:\n", " print(results_dir)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the example below, we can see that each result folder contains different files with detailed results for each of the optimized models." ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/josef/Schreibtisch/01_HorticulturalSalesPrediction/ForeTiS/docs/source/tutorials/tutorial_data/results/xgboost/2023-03-03_21-50-28_dataset_full/xgboost_dataset_full_best_refitting_cycle_complete.png\n", "/home/josef/Schreibtisch/01_HorticulturalSalesPrediction/ForeTiS/docs/source/tutorials/tutorial_data/results/xgboost/2023-03-03_21-50-28_dataset_full/xgboost_runtime_overview.csv\n", "/home/josef/Schreibtisch/01_HorticulturalSalesPrediction/ForeTiS/docs/source/tutorials/tutorial_data/results/xgboost/2023-03-03_21-50-28_dataset_full/final_model_test_results.csv\n", "/home/josef/Schreibtisch/01_HorticulturalSalesPrediction/ForeTiS/docs/source/tutorials/tutorial_data/results/xgboost/2023-03-03_21-50-28_dataset_full/final_model_feature_importances.csv\n", "/home/josef/Schreibtisch/01_HorticulturalSalesPrediction/ForeTiS/docs/source/tutorials/tutorial_data/results/xgboost/2023-03-03_21-50-28_dataset_full/unfitted_model_trial6\n", "/home/josef/Schreibtisch/01_HorticulturalSalesPrediction/ForeTiS/docs/source/tutorials/tutorial_data/results/xgboost/2023-03-03_21-50-28_dataset_full/Optuna_DB.db\n", "/home/josef/Schreibtisch/01_HorticulturalSalesPrediction/ForeTiS/docs/source/tutorials/tutorial_data/results/xgboost/2023-03-03_21-50-28_dataset_full/validation_results_trial6.csv\n" ] } ], "source": [ "result_elements = list(result_folders[0].glob('*'))\n", "for result_element in result_elements:\n", " print(result_element)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ``*_runtime_overview.csv`` file contains the best parameters, evaluation as well as runtime metrics for each of the optimized models as we can see in the example below." ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Trialrefitting_cycleprocess_time_sreal_time_sparamsnote
00NaN15.5546222.766639{'n_estimators': 700, 'max_depth': 10, 'learni...successful
11NaN18.4515913.247319{'n_estimators': 800, 'max_depth': 8, 'learnin...successful
22NaN13.8019432.463260{'n_estimators': 650, 'max_depth': 6, 'learnin...successful
33NaN15.7026492.794137{'n_estimators': 750, 'max_depth': 9, 'learnin...successful
44NaN10.7694711.975961{'n_estimators': 500, 'max_depth': 10, 'learni...successful
55NaN12.2548522.201480{'n_estimators': 550, 'max_depth': 6, 'learnin...successful
66NaN17.0350963.030404{'n_estimators': 800, 'max_depth': 3, 'learnin...successful
77NaN10.0105191.830079{'n_estimators': 500, 'max_depth': 3, 'learnin...successful
88NaN14.2099532.536838{'n_estimators': 650, 'max_depth': 6, 'learnin...successful
99NaN10.2660351.879361{'n_estimators': 500, 'max_depth': 9, 'learnin...successful
10meanNaN13.8056732.472548NaNNaN
11stdNaN2.9323920.493324NaNNaN
12maxNaN18.4515913.247319NaNNaN
13minNaN10.0105191.830079NaNNaN
14retraining_after_10_trialscomplete8.8226041.510213{'colsample_bytree': 0.9000000000000001, 'gamm...successful
\n", "
" ], "text/plain": [ " Trial refitting_cycle process_time_s real_time_s \\\n", "0 0 NaN 15.554622 2.766639 \n", "1 1 NaN 18.451591 3.247319 \n", "2 2 NaN 13.801943 2.463260 \n", "3 3 NaN 15.702649 2.794137 \n", "4 4 NaN 10.769471 1.975961 \n", "5 5 NaN 12.254852 2.201480 \n", "6 6 NaN 17.035096 3.030404 \n", "7 7 NaN 10.010519 1.830079 \n", "8 8 NaN 14.209953 2.536838 \n", "9 9 NaN 10.266035 1.879361 \n", "10 mean NaN 13.805673 2.472548 \n", "11 std NaN 2.932392 0.493324 \n", "12 max NaN 18.451591 3.247319 \n", "13 min NaN 10.010519 1.830079 \n", "14 retraining_after_10_trials complete 8.822604 1.510213 \n", "\n", " params note \n", "0 {'n_estimators': 700, 'max_depth': 10, 'learni... successful \n", "1 {'n_estimators': 800, 'max_depth': 8, 'learnin... successful \n", "2 {'n_estimators': 650, 'max_depth': 6, 'learnin... successful \n", "3 {'n_estimators': 750, 'max_depth': 9, 'learnin... successful \n", "4 {'n_estimators': 500, 'max_depth': 10, 'learni... successful \n", "5 {'n_estimators': 550, 'max_depth': 6, 'learnin... successful \n", "6 {'n_estimators': 800, 'max_depth': 3, 'learnin... successful \n", "7 {'n_estimators': 500, 'max_depth': 3, 'learnin... successful \n", "8 {'n_estimators': 650, 'max_depth': 6, 'learnin... successful \n", "9 {'n_estimators': 500, 'max_depth': 9, 'learnin... successful \n", "10 NaN NaN \n", "11 NaN NaN \n", "12 NaN NaN \n", "13 NaN NaN \n", "14 {'colsample_bytree': 0.9000000000000001, 'gamm... successful " ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "runtime_overview_file = [overview_file for overview_file in result_elements if '_runtime_overview' in str(overview_file)][0]\n", "pd.read_csv(runtime_overview_file)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Beyond that, we see below that the detailed results for each optimized model contain validation and test results, saved prediction models, an optuna database, a runtime overview with information for each trial (good for debugging, as pruning reasons are also documented) and for some prediction models also feature importances." ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
y_pred_retrainy_true_retrainy_true_testy_pred_test_refitting_period_completey_pred_test_var_refitting_period_completetest_refitting_period_complete_msetest_refitting_period_complete_rmsetest_refitting_period_complete_r2_scoretest_refitting_period_complete_explained_variancetest_refitting_period_complete_MAPEtest_refitting_period_complete_sMAPE
01.172851e+061.189235e+061.632762e+061572810.3750.07.746675e+0988015.1980280.849710.8500354.376424.094529
11.138915e+061.185445e+061.255720e+061246359.7500.0NaNNaNNaNNaNNaNNaN
28.919995e+059.519060e+051.046709e+061061496.3750.0NaNNaNNaNNaNNaNNaN
39.541891e+059.149935e+051.080526e+061157195.7500.0NaNNaNNaNNaNNaNNaN
48.826827e+058.574261e+051.281535e+061304759.6250.0NaNNaNNaNNaNNaNNaN
....................................
2183NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2184NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2185NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2186NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2187NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "

2188 rows × 11 columns

\n", "
" ], "text/plain": [ " y_pred_retrain y_true_retrain y_true_test \\\n", "0 1.172851e+06 1.189235e+06 1.632762e+06 \n", "1 1.138915e+06 1.185445e+06 1.255720e+06 \n", "2 8.919995e+05 9.519060e+05 1.046709e+06 \n", "3 9.541891e+05 9.149935e+05 1.080526e+06 \n", "4 8.826827e+05 8.574261e+05 1.281535e+06 \n", "... ... ... ... \n", "2183 NaN NaN NaN \n", "2184 NaN NaN NaN \n", "2185 NaN NaN NaN \n", "2186 NaN NaN NaN \n", "2187 NaN NaN NaN \n", "\n", " y_pred_test_refitting_period_complete \\\n", "0 1572810.375 \n", "1 1246359.750 \n", "2 1061496.375 \n", "3 1157195.750 \n", "4 1304759.625 \n", "... ... \n", "2183 NaN \n", "2184 NaN \n", "2185 NaN \n", "2186 NaN \n", "2187 NaN \n", "\n", " y_pred_test_var_refitting_period_complete \\\n", "0 0.0 \n", "1 0.0 \n", "2 0.0 \n", "3 0.0 \n", "4 0.0 \n", "... ... \n", "2183 NaN \n", "2184 NaN \n", "2185 NaN \n", "2186 NaN \n", "2187 NaN \n", "\n", " test_refitting_period_complete_mse test_refitting_period_complete_rmse \\\n", "0 7.746675e+09 88015.198028 \n", "1 NaN NaN \n", "2 NaN NaN \n", "3 NaN NaN \n", "4 NaN NaN \n", "... ... ... \n", "2183 NaN NaN \n", "2184 NaN NaN \n", "2185 NaN NaN \n", "2186 NaN NaN \n", "2187 NaN NaN \n", "\n", " test_refitting_period_complete_r2_score \\\n", "0 0.84971 \n", "1 NaN \n", "2 NaN \n", "3 NaN \n", "4 NaN \n", "... ... \n", "2183 NaN \n", "2184 NaN \n", "2185 NaN \n", "2186 NaN \n", "2187 NaN \n", "\n", " test_refitting_period_complete_explained_variance \\\n", "0 0.850035 \n", "1 NaN \n", "2 NaN \n", "3 NaN \n", "4 NaN \n", "... ... \n", "2183 NaN \n", "2184 NaN \n", "2185 NaN \n", "2186 NaN \n", "2187 NaN \n", "\n", " test_refitting_period_complete_MAPE \\\n", "0 4.37642 \n", "1 NaN \n", "2 NaN \n", "3 NaN \n", "4 NaN \n", "... ... \n", "2183 NaN \n", "2184 NaN \n", "2185 NaN \n", "2186 NaN \n", "2187 NaN \n", "\n", " test_refitting_period_complete_sMAPE \n", "0 4.094529 \n", "1 NaN \n", "2 NaN \n", "3 NaN \n", "4 NaN \n", "... ... \n", "2183 NaN \n", "2184 NaN \n", "2185 NaN \n", "2186 NaN \n", "2187 NaN \n", "\n", "[2188 rows x 11 columns]" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "final_model_test_results_file = [overview_file for overview_file in result_elements if 'final_model_test_results' in str(overview_file)][0]\n", "pd.read_csv(final_model_test_results_file)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Further information\n", "This notebooks shows how the use the ForeTiS pip package to run an optimization. Furthermore, we give an overview of the individual steps within ``optim_pipeline.run()``.\n", "\n", "For more information on specific topcis, see the following links:\n", "\n", "- [Documentation of the whole package](https://ForeTiS.readthedocs.io/en/latest/index.html)\n", "\n", "- [easyPheno's GitHub repository](https://github.com/grimmlab/ForeTiS)\n", "\n", "- Prepare your data according to our format: [Data Guide](https://ForeTiS.readthedocs.io/en/latest/data.html)\n", "\n", "- The [Installation Guide](https://ForeTiS.readthedocs.io/en/latest/install_docker.html) as well as [basic tutorial](https://ForeTiS.readthedocs.io/en/latest/tutorials/tut_run_docker.html) for the Docker workflow as an alternative\n", "\n", "- Several [advanced topics](https://ForeTiS.readthedocs.io/en/latest/tutorials/tut_adv.html) such as adjusting existing prediction models or creation of new ones" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.6" } }, "nbformat": 4, "nbformat_minor": 1 }